/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucuenca.ec.nosql.controller;

import edu.ucuenca.ec.nosql.conexion.DriverMongoDB;
import edu.ucuenca.ec.nosql.conexion.Neo4jEngine;
import edu.ucuenca.ec.nosql.modelos.Carrito;
import edu.ucuenca.ec.nosql.modelos.Compras;
import edu.ucuenca.ec.nosql.modelos.Persona;
import edu.ucuenca.ec.nosql.modelos.Producto;
import edu.ucuenca.ec.nosql.security.CarritoSession;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author mivkys
 */
@ManagedBean(name = "loginController")
@SessionScoped
public class LoginController implements Serializable {

    private Persona selected;
    private String username;

    private String pass;

    public LoginController() {

    }

    @PostConstruct
    public void init() {
        //DriverMongoDB.setDB_Mongo("online");
        // relacionProductos = DriverMongoDB.findAll("producto");
        //relacionProductos =new ArrayList<>();// AKI SE debe mandar a buscar las productos relacionado o q le gustan a sus amigos

        //Neo4jEngine.conexionFactory();
        selected = CarritoSession.getUsuario();/// la persona logeada
        //selected = new Persona();
    }

//    public void prepareLogin() {
//        System.out.println("Si vino");
//        selected = new Persona();
//        username = "";
//        pass = "";
//    }
    public void login() {
        System.out.println("Si logeo" + username + " " + pass);

        if (!username.isEmpty() && !pass.isEmpty()) {
            Neo4jEngine.conexionFactory();
            selected = Neo4jEngine.Loger(username, pass);
            if (selected != null) {
                CarritoSession.setUsuario(selected);
                if (CarritoSession.getAllProductos() == null || CarritoSession.getAllProductos().isEmpty()) {
                    cargarProductos();
                }
                cargarAmigos();
                cargarProductosCarritosyRecomendados();
                cargarCompras();
            }
        }
    }

    public void logout() {
        System.out.println("Si despogeo");
        selected = null;
        CarritoSession.setUsuario(selected);
//        logeado = null;
//        CarritoSession.setUsuario(logeado);
    }

    private void cargarProductos() {
        DriverMongoDB.setDB_Mongo("online");
        List<Producto> itemsProductos = DriverMongoDB.find("producto", "group", CarritoSession.getGroup());
        CarritoSession.setAllProductos(itemsProductos);
        itemsProductos = null;
    }

    private void cargarAmigos() {
        if (CarritoSession.getUsuario() != null) {
            List<Persona> amigos;
            Neo4jEngine.conexionFactory();
            amigos = Neo4jEngine.matchAmigos(CarritoSession.getUsuario());
            CarritoSession.setAmigos(amigos);
            amigos = null;
        }
    }

    private void cargarProductosCarritosyRecomendados() {
        Carrito carrito = new Carrito();
        List<Producto> recomenProductos = new ArrayList<>();
        List<Producto> addProductos = new ArrayList<>();
        if (CarritoSession.getUsuario() != null && CarritoSession.getAllProductos() != null) {///////////no necesario la ultima condicion

            DriverMongoDB.setDB_Mongo("online");
            carrito = DriverMongoDB.findCarrito("carrito", CarritoSession.getUsuario().getId());////busca el carrito del usuario;
//            for (Producto producto : CarritoSession.getAllProductos()) {
//                if (producto.productoRecomendado(CarritoSession.getUsuario().getId())) {
//                    recomenProductos.add(producto);
//                }
//            }
            if (carrito != null && carrito.getIdsProductos() != null) {
                for (int idproducto : carrito.getIdsProductos()) {
                    Producto producto = DriverMongoDB.findIdProducto("producto", idproducto);
                    if (producto != null) {
                        addProductos.add(producto);
                    }

                }
            }
        }

        CarritoSession.setAddProductos(addProductos);
        addProductos = null;

        CarritoSession.setRecomenProductos(recomenProductos);
        recomenProductos = null;
    }

    private void cargarCompras() {
        if (CarritoSession.getUsuario() != null) {
            DriverMongoDB.setDB_Mongo("online");
            Compras compras = DriverMongoDB.findCompras("compras", CarritoSession.getUsuario().getId());
            
            CarritoSession.setCompras(compras);
            if(compras==null){
                compras = new Compras();
                compras.setId(CarritoSession.getUsuario().getId());
                CarritoSession.setCompras(compras);
            }
            compras = null;
        }
    }

    public void despliegue() {
    }

    /**
     * @return the selected
     */
    public Persona getSelected() {
        return selected;
    }

    /**
     * @param selected the selected to set
     */
    public void setSelected(Persona selected) {
        this.selected = selected;
    }

    /**
     * @return the username
     */
    public String getUsername() {
        return username;
    }

    /**
     * @param username the username to set
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * @return the pass
     */
    public String getPass() {
        return pass;
    }

    /**
     * @param pass the pass to set
     */
    public void setPass(String pass) {
        this.pass = pass;
    }

}
